package com.rfid.framework.web.service;

import com.rfid.common.constant.CodeConstants;
import com.rfid.common.core.domain.entity.SysDictData;
import com.rfid.common.exception.BusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("code")
public class CodeGenerateService {

    @Autowired
    private DictService dictService;

    /**
     * 生成编码规则
     * @param DictCode 字典编码 cstno 对应的表的编码code
     * @return
     */
    public String generateCode(String DictCode,String cstno,Object object){
        List<SysDictData> dictDatas=dictService.getType(DictCode);
        if(dictDatas==null){
            throw new BusinessException("客户编码未配置规则");
        }
        String num="00000000";
        //查询表最后一条记录
        String  length="";//编码长度
        String prex="";  //编码前缀
        String init="";//编码初始化
        for(SysDictData data:dictDatas){
            String lable=data.getDictLabel();
            //取出字段长度
            if(lable.equals(CodeConstants.CODE_LENGTH)){
                length=data.getDictValue();
            }
            //字段前缀
            if(lable.equals(CodeConstants.CODE_PREX)){
                prex=data.getDictValue();
            }
            //字段初始化
            if(lable.equals(CodeConstants.CODE_INIT)){
                init=data.getDictValue();
            };
        };
        if(object!=null){
            if(cstno.length()>Integer.valueOf(length)){
                //客户编号长度设置减小
                num=num.substring(0,(Integer.valueOf(length)-1-(prex.concat(init).length())));
                cstno=prex.concat(init);
                cstno=cstno.concat(num).concat("1");
            }else if(cstno.length()==Integer.valueOf(length)){
                //客户编号长度设置未变化
                if(cstno.substring(0,1).equals(prex)){
                    //编码前缀未发生改变
                    if(cstno.length()>Integer.valueOf(length)){
                        throw new BusinessException("客户编号超过最大限制");
                    }
                    cstno= cstno.replace(prex.concat(init),"");
                    if(cstno.length()==Integer.valueOf(length)){
                        //说明编码初始化prex发生变化
                        cstno=prex.concat(init);
                        num=num.substring(0,Integer.valueOf(length)-prex.concat(init).length()-1);
                        cstno=prex.concat(init).concat(num).concat("1");
                    }else{
                        Integer endPrex=Integer.valueOf(cstno)+1;
                        num=num.substring(0,Integer.valueOf(length)-prex.concat(init).length()-endPrex.toString().length());
                        cstno=prex.concat(init).concat(num).concat(endPrex.toString());
                    }

                }else{
                    //编码前缀发生了变化
                    cstno=prex.concat(init);
                    num=num.substring(0,Integer.valueOf(length)-prex.concat(init).length());
                    cstno=prex.concat(init).concat(num).concat("1");
                }

            }else{
                //客户编号长度增加
                cstno=prex.concat(init);
                num=num.substring(0,(Integer.valueOf(length)-1-(cstno.length())));
                cstno=cstno.concat(num).concat("1");
            }
        }else{
                cstno=prex.concat(init);
                System.out.println("设置的长度"+Integer.valueOf(length));
                System.out.println("客户编号长度"+cstno.length());
                num=num.substring(0,(Integer.valueOf(length)-(cstno.length())));
                if(cstno.length()!=Integer.valueOf(length)){
                    cstno=cstno.concat("1");
                }else{
                    cstno=cstno.concat(num).concat("1");
                }
        }
        return cstno;
    }
}
